import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 设置中文字体（建议放在开头）
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 读取数据
df = pd.read_excel('学生各学期成绩表.xlsx', index_col=0)

# 数据清洗：将非数值转换为NaN，然后填充或删除
df = df.apply(pd.to_numeric, errors='coerce')  # 转换为数值类型
df = df.fillna(0)  # 将NaN填充为0（或根据需求用dropna()删除）

# 计算各列总和
data = df.agg('sum')

# 过滤掉总和为0的列（可选）
data = data[data > 0]

# 绘制饼图
plt.figure(figsize=(10, 6))  # 设置图形大小
plt.pie(data, labels=data.index, autopct='%.2f%%', startangle=90)
plt.title('各科成绩占比饼状图')
plt.axis('equal')  # 保证饼图是正圆形
plt.show()

# 打印数据信息以便调试
print("数据形状:", df.shape)
print("各列总和:\n", data)